﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Data.Common;
using ProyectoSIETE.Properties;
using System.Configuration;
//using ENProyectoSIETE;
//using CADProyectoSIETE;
using ENProyecto7;
using System.IO;

namespace ProyectoSIETE
{
	public partial class frmGestionObjetos: Form
	{
		public frmGestionObjetos()
		{
			InitializeComponent();
		}

        // conexion con la BD
        public SqlConnection conexion;
        private string directorioImagenes = @"..\..\..\WebProyectoSiete\img\";

        // variable para saber si se esta en modo edicion o no
        private bool editarOn=false;

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {   
                // TODO: esta línea de código carga datos en la tabla 'bDProyecto7DataSet.TipoObjeto' Puede moverla o quitarla según sea necesario.
                this.tipoObjetoTableAdapter.Fill(this.bDProyecto7DataSet.TipoObjeto);
                // TODO: esta línea de código carga datos en la tabla 'bDProyecto7DataSet.Objeto' Puede moverla o quitarla según sea necesario.
                this.objetoTableAdapter.Fill(this.bDProyecto7DataSet.Objeto);
                ENObjeto objEN = new ENObjeto();
                DataSet dataS = new DataSet();
                // se actualiza el dgv
                dataS = objEN.obtenerObjetos();
                dgvObjetos.DataSource = dataS;
                dgvObjetos.DataMember = "Objeto";
            }
            catch (Exception ex)    
            {
                MessageBox.Show(ex.ToString(), "");
            }
                
            /*
            // conexion con la BD para los tipo de objetos
            string aux = Settings.Default.BDProyecto7ConnectionString;
            conexion = new SqlConnection(aux);*/
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (lbIdObjeto.Text != "")
            {
                if (MessageBox.Show("¿Desea borrar el objeto " + lbIdObjeto.Text + "?", "Confirmar borrar", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    try
                    {
                        ENObjeto objEN = new ENObjeto();
                        objEN.borrarObjeto(int.Parse(lbIdObjeto.Text));
                        DataSet dataS = new DataSet();
                        // se actualiza el dgv
                        dataS = objEN.obtenerObjetos();
                        dgvObjetos.DataSource = dataS;
                        dgvObjetos.DataMember = "Objeto";
                        MessageBox.Show("Objeto borrado", "", MessageBoxButtons.OK);
                        lbIdObjeto.Text = "";

                        /*
                        ObjetoCAD objCad = new ObjetoCAD();
                        objCad.borrarObjeto(int.Parse(lbIdObjeto.Text));
                        DataSet dataS = new DataSet();
                        // se actualiza el dgv
                        dataS = objCad.obtenerObjetos();
                        dgvObjetos.DataSource = dataS;
                        dgvObjetos.DataMember = "Objeto";
                        MessageBox.Show("Objeto borrado", "", MessageBoxButtons.OK);
                        lbIdObjeto.Text = "";*/
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Error al borrar un objeto"+ex.ToString(), "Error", MessageBoxButtons.OK);
                    }
                }
            }
            else {
                MessageBox.Show("Selecciona un objeto", "Error", MessageBoxButtons.OK);
            }
        }


        private void button4_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void salirToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            // comprobar que no tenga caracteres extraños
            //string regExp = @"^\w*$";
            Regex objAlphaPattern = new Regex(@"^[a-zA-Z0-9\s]*$");
            if (!objAlphaPattern.IsMatch(tbBuscador.Text))
            {
                epObjetos.SetError(tbBuscador,"Caracteres no validos");
            }
            else {
                try
                {
                    ENObjeto objEN = new ENObjeto();
                    dgvObjetos.DataSource = objEN.buscarObjetos(tbBuscador.Text.ToString());
                    /*
                    ObjetoCAD objCAD = new ObjetoCAD();
                    dgvObjetos.DataSource =  objCAD.buscarObjetos(tbBuscador.Text.ToString());*/

                }
                catch (Exception ex) {
                    MessageBox.Show("Error al cargar los datos", "Error", MessageBoxButtons.OK);
                }

            }
        }

        
        private void btnGuardar_Click(object sender, EventArgs e)
        {
            // se comprueba si se edita o se inserta
            try
            {
                Regex objAlphaPattern = new Regex(@"^[a-zA-Z0-9\s]*$");
                
                // se se comprueba que todos los campos esten rellanados
                ENObjeto nuevoObjeto = new ENObjeto();
                bool correcto = true;

                //comprobacion dle nombre
                if (tbNombre.Text == null || tbNombre.Text == "" || !objAlphaPattern.IsMatch(tbNombre.Text))
                {
                    epObjetos.SetError(tbNombre,"Introduce un nombre correcto");
                    correcto = false;
                }
                else {
                    nuevoObjeto.NombreObjeto=tbNombre.Text;
                    epObjetos.SetError(tbNombre,"");
                }

                // comprobacion del tipo de objeto seleccionado
                if (ddlTipoObjeto.SelectedValue == null)
                {
                    epObjetos.SetError(ddlTipoObjeto, "Selecciona un objeto");
                    correcto = false;
                }
                else
                {
                    nuevoObjeto.TipoObjeto = (int) ddlTipoObjeto.SelectedValue;
                    epObjetos.SetError(ddlTipoObjeto,"");
                }

                //comprobacion del atributo seleccionado
                if (ddlAtributo.SelectedIndex == -1 )
                {
                    epObjetos.SetError(ddlAtributo,"Selecciona un atributo");
                    correcto = false;
                }
                else
                {       
                    epObjetos.SetError(ddlAtributo,"");
                }

                // comprobacion de la cantidad añadida
                if (nudCantidad.Value <= 0)
                {
                    epObjetos.SetError(nudCantidad,"El atributo tiene que ser mayor de 0");
                    correcto = false;
                }
                else { 
                    if (ddlAtributo.SelectedIndex == 0){
                        nuevoObjeto.AtaqueObjeto = (int)nudCantidad.Value;
                    }
                    else if (ddlAtributo.SelectedIndex == 1)
                    {
                        nuevoObjeto.DefensaObjeto = (int)nudCantidad.Value;
                    }
                    else {
                        nuevoObjeto.CuracionObjeto = (int)nudCantidad.Value;
                    }
                    epObjetos.SetError(nudCantidad,"");
                }
                nuevoObjeto.PrecioObjeto = 0;

                // comprobacion de la descripccion seleccionada
                if (tbDescripcion.Text=="") {
                    epObjetos.SetError(tbDescripcion,"Caracteres erroneos en la descripcion");
                    correcto = false;
                }
                else if (tbDescripcion.Text != "")
                {
                    epObjetos.SetError(tbDescripcion,"");
                    nuevoObjeto.DescripcionObjeto = tbDescripcion.Text;
                }
                // comprobacion de la imagen seleccionada
                if (tbImagenObjeto.Text != "") {

                    string[] ficheroObjeto = tbImagenObjeto.Text.Split(new char[] { '\\' });
                    string imagenObjeto = ficheroObjeto[ficheroObjeto.Length - 1];

                    nuevoObjeto.ImagenObjeto = imagenObjeto;
                    //---Copiamos la imagen al directorio "imagenes" del proyecto

                    string ficheroDestino = Path.Combine(directorioImagenes, imagenObjeto);

                    //---Si la carpeta "Imagenes" dentro del proyecto no exisitiera, la crearíamos
                    if (Directory.Exists(directorioImagenes))
                    {
                        Directory.CreateDirectory(directorioImagenes);
                    }

                    //---Copiamos el fichero
                    File.Copy(tbImagenObjeto.Text, ficheroDestino, true);
                }
                if (editarOn == false){
                    // si todo es correcto se inserta en la bd y se actualiza el dgv
                    if(correcto){
                        // se crea el objeto CAD y el dataSet
                        DataSet dataS;
                        // se inserta el nuevo objeto en la BD
                        nuevoObjeto.insertarObjeto();
                        // se actualiza el dgv
                        dataS = nuevoObjeto.obtenerObjetos();
                        dgvObjetos.DataSource = dataS;
                        dgvObjetos.DataMember = "Objeto";


                        /*
                        // se crea el objeto CAD y el dataSet
                        DataSet dataS;
                        ObjetoCAD objCad = new ObjetoCAD(); 
                        // se inserta el nuevo objeto en la BD
                        objCad.insertarObjeto(nuevoObjeto);
                        // se actualiza el dgv
                        dataS = objCad.obtenerObjetos();
                        dgvObjetos.DataSource = dataS;
                        dgvObjetos.DataMember = "Objeto";
                         */
                    }
                        
                }
                else if(editarOn==true) {
                    if (correcto)
                    {
                        if (lbIdObjeto.Text != "")
                        {
                            // se crea el objeto CAD y el dataSet
                            DataSet dataS;
                            ENObjeto objEN = new ENObjeto();
                            // se inserta el nuevo objeto en la BD
                            nuevoObjeto.editarObjeto(int.Parse(lbIdObjeto.Text));
                            // se actualiza el dgv
                            dataS = nuevoObjeto.obtenerObjetos();
                            dgvObjetos.DataSource = dataS;
                            dgvObjetos.DataMember = "Objeto";

                            /*
                            // se crea el objeto CAD y el dataSet
                            DataSet dataS;
                            ObjetoCAD objCad = new ObjetoCAD();
                            // se inserta el nuevo objeto en la BD
                            objCad.editarObjeto(int.Parse(lbIdObjeto.Text), nuevoObjeto);
                            // se actualiza el dgv
                            dataS = objCad.obtenerObjetos();
                            dgvObjetos.DataSource = dataS;
                            dgvObjetos.DataMember = "Objeto";
                             */
                        }
                        else {
                            MessageBox.Show("Selecciona un objeto", "Error", MessageBoxButtons.OK);
                        }
                    }
                    
                }
            }
            catch (Exception ex) {
                MessageBox.Show(ex.ToString(), "", MessageBoxButtons.OK);
            }
        }

        // insertamos un nuevo tipo de objeto
        private void btnNuevoTipo_Click(object sender, EventArgs e)
        {
            try {
                Regex expresion = new Regex(@"^[a-zA-Z0-9\s]*$");
                if (tbNuevoTipo.Text != null && tbNuevoTipo.Text!="" && expresion.IsMatch(tbNuevoTipo.Text))
                {
                    ENObjeto objEN = new ENObjeto();
                    objEN.insertarTipo(tbNuevoTipo.Text);
                    ddlTipoObjeto.DataSource = objEN.obtenerTipoObjetos();

                    /*
                    ObjetoCAD obj = new ObjetoCAD();
                    obj.insertarTipo(tbNuevoTipo.Text);
                    ddlTipoObjeto.DataSource = obj.obtenerTipoObjetos();
                    */
                }
                else {
                    MessageBox.Show("Introduce un nuevo tipo correcto","Error",MessageBoxButtons.OK);
                }
            
            }
            catch (Exception ex){
                MessageBox.Show(ex.ToString(),"",MessageBoxButtons.OK);
            }
        }

        private void btnBorrarTipo_Click(object sender, EventArgs e)
        {
            try { 
                if (int.Parse(ddlTipoObjeto.SelectedValue.ToString()) >-1)
                {
                    ENObjeto objEN = new ENObjeto();
                    objEN.borrarTipo(int.Parse(ddlTipoObjeto.SelectedValue.ToString()));
                    ddlTipoObjeto.DataSource = objEN.obtenerTipoObjetos();
                    // se actualiza el dgv
                    DataSet dataS;
                    dataS = objEN.obtenerObjetos();
                    dgvObjetos.DataSource = dataS;
                    dgvObjetos.DataMember = "Objeto";

                    /*
                    ObjetoCAD obj = new ObjetoCAD();
                    MessageBox.Show(ddlTipoObjeto.SelectedValue.ToString(),"",MessageBoxButtons.OK);
                    obj.borrarTipo(int.Parse(ddlTipoObjeto.SelectedValue.ToString()));
                    ddlTipoObjeto.DataSource = obj.obtenerTipoObjetos();
                    // se actualiza el dgv
                    DataSet dataS;
                    ObjetoCAD objCad = new ObjetoCAD();
                    dataS = objCad.obtenerObjetos();
                    dgvObjetos.DataSource = dataS;
                    dgvObjetos.DataMember = "Objeto";
                    */
                }
                else {
                    MessageBox.Show("Selecciona un tipo.","Error",MessageBoxButtons.OK);
                }
            
            }
            catch (Exception ex){
                MessageBox.Show(ex.ToString(),"",MessageBoxButtons.OK);
            }
        
        }

        private void dgvObjetos_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (e.RowIndex > -1)
                {
                    // se pone en modo editar
                    editarOn = true;
                    lbIdObjeto.Text = "";
                    groupBox1.Text = "Editando";

                    tbImagenObjeto.Text = "";

                    ENObjeto objeto = new ENObjeto();
                    // se obtiene el objeto seleccionado consultando a la BD
                    objeto.obtenerObjeto(int.Parse(dgvObjetos.Rows[e.RowIndex].Cells[0].Value.ToString()));

                    // se van actualizando todos los campos
                    tbNombre.Text = objeto.NombreObjeto;
                    ddlTipoObjeto.SelectedIndex = objeto.TipoObjeto - 1;
                    if (objeto.AtaqueObjeto != 0)
                    {
                        ddlAtributo.SelectedIndex = 0;
                        nudCantidad.Value = objeto.AtaqueObjeto;
                    }
                    else if (objeto.DefensaObjeto != 0)
                    {
                        ddlAtributo.SelectedIndex = 1;
                        nudCantidad.Value = objeto.DefensaObjeto;
                    }
                    else
                    {
                        ddlAtributo.SelectedIndex = 2;
                        nudCantidad.Value = objeto.CuracionObjeto;
                    }
                    tbDescripcion.Text = objeto.DescripcionObjeto;
                    //tbImagenObjeto.Text = objeto.ImagenObjeto;
                    lbIdObjeto.Text = dgvObjetos.Rows[e.RowIndex].Cells[0].Value.ToString();
                    if (File.Exists(directorioImagenes + objeto.ImagenObjeto))
                        pbObjeto.ImageLocation = directorioImagenes + objeto.ImagenObjeto;
                    else
                        pbObjeto.ImageLocation = directorioImagenes + "sin_imagen.png";
                }
            }
            catch (Exception ex) {
                MessageBox.Show("Error al cargar los datos.","Error",MessageBoxButtons.OK);
            
            }
        }

        private void btnVolver_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            try
            {
                // se pone en modo guardar
                editarOn = false;
                lbIdObjeto.Text = "";
                groupBox1.Text = "Nuevo";
                // se limpian todos los datos
                tbNombre.Text = "";
                ddlAtributo.SelectedValue = 0;
                ddlTipoObjeto.SelectedValue = 0;
                nudCantidad.Value = 0;
                tbDescripcion.Text = "";
                tbImagenObjeto.Text = "";
            }
            catch (Exception ex) 
            {
                MessageBox.Show("Error al limpiar los datos","Error");
            }
        }

        private void btnExaminar_Click(object sender, EventArgs e)
        {
            DialogResult resultado = ofdObjetos.ShowDialog();
            if (resultado == DialogResult.OK)
            {
                tbImagenObjeto.Text = ofdObjetos.FileName;
                pbObjeto.ImageLocation = ofdObjetos.FileName;
            }
        }

        private void tbBuscador_MouseClick(object sender, MouseEventArgs e)
        {
            tbBuscador.Text = "";
        }




 
	}
}
